home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
serien
/
purity
/
nr.43
/
fontsensitiv
/
fontsensitiv.unit
< prev
next >
Wrap
Text File
|
1995-01-07
|
6KB
|
218 lines
{ Unit: SimpleFontsensitiv
Version: 1.3 (22.12.94)
Sprache: KP/MP3 OS3.1-Includes
Autor: PackMAN
Falk Zühlsdorff
Lindenberg 66
98693 Ilmenau
email: ai036@rz.tu-ilmenau.de
Copyright: bei Verwendung von Routinen muß selbiges mit
Namenszug des Autors im Infofenster und in der
.dok des jeweiligen Programmes gekennzeichnet sein.
Bei Sharware / Lowcost erhält der Autor zu jeder
Version ein kostenloses Exemplar zugeschickt !!! }
UNIT SimpleFontsensitiv;
INTERFACE
USES INTUITION,GRAPHICS,EXEC,GADTOOLS;
TYPE PenType = ^ARRAY[0..12] OF WORD;
pointerfeld = array[1..40] of Word;
VAR {-------------------- WBScreen / Font... ----------------------}
WBScr : p_screen;
drawinfo : p_drawinfo;
vi : PTR;
txattr : TextAttr;
font : p_textfont;
ysize,xsize,
STF,baseline : WORD;
Pgad,Glist : p_Gadget;
Pointerptr : ^Pointerfeld;
waitreq : Requester;
PENs : PenType;
{--------------------------------------------------------------------}
PROCEDURE CloseSomeLibs;
PROCEDURE PressButton(VAR WinX:p_Window;VAR gad:p_Gadget);
PROCEDURE SetPoi(ThisWin:p_Window);
PROCEDURE ClearPoi(ThisWin:p_Window);
FUNCTION Fontsensitiv(XWidth,XHeight:Word,first:boolean):boolean;
PROCEDURE Error(Tx:string);
FUNCTION V37:boolean;
{--------------------------------------------------------------------}
IMPLEMENTATION
{--------------------------------------------------------------------}
PROCEDURE Error;
VAR ErrorTextAttr : TextAttr;
ITx,ITxGad : IntuiText;
dummy : boolean;
BEGIN
ErrorTextAttr:=TextAttr('topaz.font',8,0,0);
ITx:=IntuiText(2,0,0,20,10,^ErrorTextAttr,Tx,NIL);
ITxGad:=IntuiText(2,0,0,2,3,^ErrorTextAttr,'OK',NIL);
dummy:=AutoRequest(NIL,^ITx,NIL,^ITxGad,0,0,330,80);
END;
{--------------------------------------------------------------------}
PROCEDURE CloseSomeLibs;
BEGIN
IF IntuitionBase<>NIL THEN CloseLib(IntuitionBase);
IF GfxBase<>NIL THEN CloseLib(GfxBase);
IF Gadtoolsbase<>NIL THEN CloseLib(Gadtoolsbase);
END;
{--------------------------------------------------------------------}
PROCEDURE PressButton;
VAR class,code,IDCMP1 : long;
help : boolean;
Msg : p_IntuiMessage;
BEGIN
IDCMP1:=WinX^.IDCMPFlags;
help:=ModifyIDCMP(WinX,IDCMP_RAWKEY);
gad^.Flags:=gad^.Flags+SELECTED;
RefreshGList(gad,WinX,NIL,1);
REPEAT
Msg:=Wait_Port(WinX^.UserPort);
Msg:=GT_GetIMsg(WinX^.UserPort);
class:=msg^.class;
code:=msg^.Code;
GT_ReplyIMsg(Msg);
UNTIL (class=IDCMP_RAWKEY) AND ((code AND $80)=$80);
delay(1);
help:=ModifyIDCMP(WinX,IDCMP1);
gad^.Flags:=gad^.Flags-SELECTED;
RefreshGList(gad,WinX,NIL,1);
END;
{--------------------------------------------------------------------}
PROCEDURE SetPoi;
VAR dummy:boolean;
BEGIN
InitRequester(^waitReq);
dummy:=Request(^waitReq,ThisWin);
SetPointer(ThisWin,PointerPTR,16,16,-6,-1);
END;
{--------------------------------------------------------------------}
PROCEDURE ClearPoi;
BEGIN
ClearPointer(ThisWin);
EndRequest(^waitReq,ThisWin);
END;
{--------------------------------------------------------------------}
FUNCTION Fontsensitiv;
VAR dummy : long;
zei : char;
PROCEDURE stopit;
BEGIN
FreeGadgets(glist);
FreeVisualInfo(vi);
CloseSomeLibs;
Fontsensitiv:=false;
END;
BEGIN
WBScr:=NIL;
WBScr:=lockpubscreen('Workbench');
IF WBScr<>NIL
THEN
BEGIN
drawinfo:=NIL;
drawinfo:=getscreendrawinfo(WBScr);
Pgad:=NIL;
Pgad:=CreateContext(^Glist);
IF (drawinfo<>NIL) AND (pgad<>nil)
THEN
BEGIN
font:=drawinfo^.dri_font;
xsize:=0;
FOR zei:=chr($00) TO chr($5E) DO
BEGIN
ysize:=textlength(^WBScr^.rastport,zei,1); {hier HilfsVAR}
IF ysize>xsize THEN xsize:=ysize;
END;
ysize:=textlength(^WBScr^.rastport,' ',1); {hier HilfsVAR}
IF ysize>xsize THEN xsize:=ysize;
ysize:=font^.tf_ysize;
STF:=ysize;
txattr:=
TextAttr(drawinfo^.dri_font^.tf_Message.mn_Node.ln_Name,
ysize,0,0);
vi:=GetVisualinfoA(WBScr,nil);
freescreendrawinfo(WBScr,drawinfo);
UnlockPubScreen(NIL,WBScr);
IF (xsize*XWidth>WBScr^.width) OR
((XHeight*ysize+STF)>WBScr^.height)
THEN
BEGIN
IF (8*XWidth>WBScr^.width) OR
((8*XHeight+STF)>WBScr^.height)
THEN
BEGIN
Error('Screen zu klein...');
stopit;
exit;
END
ELSE
BEGIN
ysize:=8;
xsize:=8;
txattr:=TextAttr('topaz.font',ysize,0,0);
Font:=OpenFont(^txattr);
END
END;
END
ELSE
BEGIN
Error('Can`t run program...');
Fontsensitiv:=false;
exit;
END;
END
ELSE {für den Fall, daß alles zu spät ist...}
BEGIN
Error('Can`t find WBench-Screen');
Fontsensitiv:=false;
exit;
END;
baseline:=font^.tf_baseline;
PENs:=PenType(drawinfo^.dri_Pens);
IF first
THEN
BEGIN
PointerPTR:=NIL;
PointerPTR:=PTR(Alloc_Mem(SizeOf(pointerfeld),
MEMF_CHIP+MEMF_CLEAR));
IF PointerPTR=NIL
THEN BEGIN CloseSomeLibs; Fontsensitiv:=false; exit;END;
PointerPTR^:=Pointerfeld
($0000,$0000,$0400,$07c0,$0000,$07c0,$0100,$0380,
$0000,$07e0,$07c0,$1ff8,$1ff0,$3fec,$3ff8,$7fde,
$3ff8,$7fbe,$7ffc,$ff7f,$7efc,$ffff,$7ffc,$ffff,
$3ff8,$7ffe,$3ff8,$7ffe,$1ff0,$3ffc,$07c0,$1ff8,
$0000,$07e0,$0000,$0000,$0000,$03f2,$0000,$0000);
END;
Fontsensitiv:=true;
END;
{---------------------------------------------------------------------}
FUNCTION V37;
VAR lib:p_library;
BEGIN
lib:=sysbase;
V37:=(lib^.lib_version>=37);
END;
{---------------------------------------------------------------------}
END.